import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CardLayoutDemo extends JFrame {
    private JButton button1, button2, button3;
    Container container;
    CardLayout myCard;

    public CardLayoutDemo() {
        this.setTitle("欢迎使用CardLayout布局管理器 ");
        container = this.getContentPane();
        button1 = new JButton("ButtonA");// 创建一个标准命令按钮，按钮上的标签有构造方法中的参数指定
        button2 = new JButton("ButtonB");
        button3 = new JButton("ButtonC");
        myCard = new CardLayout(); // 创建CardLayout布局管理器对象
        container.setLayout(myCard);// 设置布局管理器
        // 设定鼠标事件的监听程序,使用户点击鼠标时在不同命令按钮间切换
        button1.addMouseListener(new MouseListenerDemo());
        button2.addMouseListener(new MouseListenerDemo());
        button3.addMouseListener(new MouseListenerDemo());
        // 将每个JButton作为一张卡片加入窗口的内容窗格中，参数字符串是为组件分配的字符串名字，分配的目的是为了让布局编辑器根据这个名字调用显示这个组件。
        container.add("first", button1);
        container.add(button2, "second");
        container.add("third", button3);
        this.setVisible(true);
        this.setSize(600, 450);
    }

    // 内部类，鼠标事件的监听者，处理鼠标事件，每当敲击鼠标键时，即显示下一张卡
    // 片。如果已经显示到最后一张，则重新显示第一张。
    class MouseListenerDemo extends MouseAdapter {
        public void mouseClicked(MouseEvent e) {
            myCard.next(container); // CardLayout类的成员方法选择下一张卡片
        }
    }

    public static void main(String[] args) {
        new CardLayoutDemo();
    }
}
